package view.controle;

import java.io.IOException;
import java.util.Hashtable;

import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.bo.EmprestimoBO;
import model.bo.EmprestimoException;
import model.entidade.Emprestimo;


public class EmprestimoServlet extends BaseServlet {

	private static final long serialVersionUID = 1L;

	public EmprestimoServlet() {
		super();
	}

	/**
	 * Método executado antes de apresentar a tela de solicitação de empréstimo.
	 * 
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 * @author Zeno
	 */
	protected void antesSolicitar(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		RequestDispatcher rd = null;

		try {
			rd = request.getRequestDispatcher("solicitar.jsp");
			rd.forward(request, response);
		}
		catch (Exception e) {
			request.setAttribute("mensagem", "Erro na ação anterior a solicitação de empréstimo.");
			request.setAttribute("detalhe", e.getMessage());
			rd = request.getRequestDispatcher("../erro.jsp");
			rd.forward(request, response);
		}

	}

	/**
	 * Método executado ao submeter o formulário da tela de solicitação do empréstimo.
	 * 
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 * @author Zeno, Wanessa
	 */
	protected void solicitar(HttpServletRequest request, HttpServletResponse response) throws Exception, EmprestimoException {

		RequestDispatcher rd = null;
		String mensagem = null;
		String mensagemErro = null;

		try {
			Emprestimo emprestimo = new Emprestimo();
			emprestimo.setCpfEmpregado(request.getParameter("cpfEmpregado"));
			emprestimo.setValorPorExtenso(request.getParameter("valorEmprestimo"));
			emprestimo.setNumPrestacoesPorExtenso(request.getParameter("numPrestacoes"));

			try {

				if (EmprestimoBO.getInstance().verificaCamposObrigatorios(emprestimo)
						&& EmprestimoBO.getInstance().verificaCpfEmpregado(emprestimo.getCpfEmpregado()) 
						)
				{
					
					Emprestimo emprestimoSolicitado = EmprestimoBO.getInstance().solicitar(emprestimo);

					if (emprestimoSolicitado!=null){
						request.setAttribute("cpfEmpregado", emprestimoSolicitado.getCpfEmpregado());
						request.setAttribute("numPrestacoes", emprestimoSolicitado.getNumPrestacoes());
					request.setAttribute("nomeEmpregado",emprestimoSolicitado.getEmpregado().getNome());
					request.setAttribute("valorEmprestimoSolicitado",emprestimoSolicitado.getValorPorExtenso());
					request.setAttribute("valorEmprestimoPrestacao",emprestimoSolicitado.getPrestacaoPorExtenso());
					request.setAttribute("valorEmprestimoTotal",emprestimoSolicitado.getTotalPorExtenso());

					rd = request.getRequestDispatcher("info.jsp");
					}
					
				}   
			}
			catch (EmprestimoException e) {
				mensagemErro = e.getMessage();
				request.setAttribute("mensagemErro", mensagemErro);
				rd = request.getRequestDispatcher("solicitar.jsp");
			}

			rd.forward(request, response);

		} 
		catch (Exception e) {
			request.setAttribute("mensagem", "Erro na ação de solicitar empréstimo.");
			request.setAttribute("detalhe", e.getMessage());
			rd = request.getRequestDispatcher("../erro.jsp");
			rd.forward(request, response);
		}
	}





	/**
	 * Método executado para listar todos os emprestimos cadastrados.
	 * 
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 * @author Arthur
	 */
	protected void listar(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		RequestDispatcher rd = null;
		String mensagem = null;

		try {
			List<Emprestimo> listaEmprestimo = EmprestimoBO.getInstance().listar();
			request.setAttribute("listaEmprestimo", listaEmprestimo);

			if (listaEmprestimo.isEmpty()) {
				mensagem = "Nenhum emprestimo cadastrado.";
				request.setAttribute("mensagem", mensagem);
			}

			rd = request.getRequestDispatcher("listar.jsp");
			rd.forward(request, response);

		} catch (Exception e) {
			request.setAttribute("mensagem", "Erro na ação de listar emprestimos.");
			request.setAttribute("detalhe", e.getMessage());
			rd = request.getRequestDispatcher("../erro.jsp");
			rd.forward(request, response);
		}
	}

	//confirmarSolicitacao
	protected void confirmarSolicitacao(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, EmprestimoException {

		RequestDispatcher rd = null;
		String mensagem = null;

		try {
			
			Emprestimo emprestimo = new Emprestimo();
			emprestimo.setCpfEmpregado(request.getParameter("cpfEmpregado"));
			emprestimo.setValorPorExtenso(request.getParameter("valorEmprestimo"));
			emprestimo.setNumPrestacoesPorExtenso(request.getParameter("numPrestacoes"));

			EmprestimoBO.getInstance().incluirLista(emprestimo);

			mensagem = "Emprestimo solicitado com sucesso!";
			request.setAttribute("mensagem", mensagem);

			rd = request.getRequestDispatcher("info.jsp");
			rd.forward(request, response);

		}catch (Exception e) {
			request.setAttribute("mensagem", "Erro na ação de listar emprestimos.");
			request.setAttribute("detalhe", e.getMessage());
			rd = request.getRequestDispatcher("../erro.jsp");
			rd.forward(request, response);
		}
	}

	
	
}